package cn.raven.system.service.impl;

import cn.raven.basic.constant.BaseConstant;
import cn.raven.system.domain.Menu;
import cn.raven.system.mapper.MenuMapper;
import cn.raven.system.service.IMenuService;
import cn.raven.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.expression.spel.ast.Operator;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author Raven
 * @since 2022-07-11
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements IMenuService {
    @Autowired
    private MenuMapper menuMapper;
    @Override
    public List<Menu> tree() {
        //获取所有数据
        List<Menu> menus = menuMapper.findAll();
        //创建一个装最终结果的集合
        List<Menu> menuList =  new ArrayList<>();
        //为了解决时间复杂度，转为map
        /*  转换为map集合，stream模式
 Map<Long, Menu> menuMap = menus.stream().collect(Collectors.toMap(Menu::getId, item -> item));
       */
        Map<Long, Menu> menuMap = new HashMap<>();
        for(Menu Menu : menus){
            menuMap.put(Menu.getId(),Menu);
        }
        //先把一级数据找出来
        for (Menu menu : menus){
            if (menu.getParentId() == null){
                menuList.add(menu);
            }else {
                Menu Menu = menuMap.get(menu.getParentId());
                if (Menu != null){
                    Menu.getChildren().add(menu);
                }
            }
        }

        return menuList;
    }

    @Override
    public void add(Menu menu) {
        /*   来自曾茂林这个坑逼的嘴遁 铭记于心 TODO
        Long parentId = menu.getParent().getId();
        if (parentId != null){
            Menu men = menuMapper.findByParentId(parentId);
            //当parent为组织机构
            if (men.getId().equals(Long.valueOf(BaseConstant.Menu.ORGANIZATION))){
                menu.setComponent(BaseConstant.Menu.ORG+menu.getComponent());
                //当parent为寻主消息
            }else if (men.getId().equals(Long.valueOf(BaseConstant.Menu.FIND_THE_LORD))){
                menu.setComponent(BaseConstant.Menu.SEARCHMSG+menu.getComponent());
                //当parent为宠物管理
            }else if(men.getId().equals(Long.valueOf(BaseConstant.Menu.PET_MANAGEMENT))){
                menu.setComponent(BaseConstant.Menu.PET+menu.getComponent());
                //当parent为订单管理
            }else if(men.getId().equals(Long.valueOf(BaseConstant.Menu.ORDER_MANAGEMENT))){
                menu.setComponent(BaseConstant.Menu.ORDER+menu.getComponent());
                //当parent为系统管理
            }else if(men.getId().equals(Long.valueOf(BaseConstant.Menu.SYSTEM_MANAGEMENT))){
                menu.setComponent(BaseConstant.Menu.SYSTEM+menu.getComponent());
            }else {//当不为一级菜单时
                menu.setComponent(men.getComponent()+"/"+menu.getComponent());
            }
        }
        */
        menuMapper.add(menu);
    }
}
